package com.wang.lottery.domain.activity.repository;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wang.lottery.domain.activity.model.po.UserTakeActivity;
import com.wang.lottery.domain.activity.model.po.UserTakeActivityCount;
import com.wang.lottery.domain.activity.model.vo.ActivityBillVO;

import java.util.Date;

/**
 * @author wjh
 * @create 2023-11-08 18:21
 * 用户参与活动仓储接口
 */
public interface IUserTakeActivityRepository extends IService<UserTakeActivity> {



    /**
     * 领取活动(user_take_activity增加数据)
     * @param activityBillVO 封装参数
     * @param takeId 领取id
     * @param takeDate 领取时间
     * @param takeCount 用户已领取次数
     */
    public void takeActivity(ActivityBillVO activityBillVO, Long takeId, Date takeDate, Integer takeCount, Long strategyId);


    /**
     * 查询用户领取次数信息
     * @param uId 请求入参【活动号、用户ID】
     * @return 领取结果
     */
    UserTakeActivityCount queryUserTakeActivityCount(String uId, Long activityId);

    /**
     * 锁定活动领取记录
     *
     * @param uId        用户ID
     * @param activityId 活动ID
     * @return 更新结果
     */
    boolean lockTackActivity(String uId, Long activityId);
    

    /**
     * 查询是否存在未执行抽奖领取活动单【user_take_activity 存在 state = 0，领取了但抽奖过程失败的，可以直接返回领取结果继续抽奖】
     *
     * @param activityId    活动ID
     * @param uId           用户ID
     * @return              领取单
     */
    UserTakeActivity queryNoConsumedTakeActivityOrder(Long activityId, String uId);
}
